home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / dev / misc / LEDA_src.lha / LEDA-3.1c-source / src / dict / _rs_tree.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-17  |  1.5 KB  |  58 lines

  1. /*******************************************************************************
  2. +
  3. +  LEDA  3.1c
  4. +
  5. +
  6. +  _rs_tree.c
  7. +
  8. +
  9. +  Copyright (c) 1994  by  Max-Planck-Institut fuer Informatik
  10. +  Im Stadtwald, 6600 Saarbruecken, FRG     
  11. +  All rights reserved.
  12. *******************************************************************************/
  13.  
  14.  
  15.  
  16. #include <LEDA/impl/rs_tree.h>
  17.  
  18.  
  19. void rs_tree::insert_rebal(rs_tree_item v)
  20. {
  21.   rs_tree_item u = v->parent;
  22.  
  23.   int prio = v->get_bal();
  24.  
  25.   if (prio < u->get_bal())
  26.   {
  27.     int dir = (v == u->child[left]) ? left : right;
  28.  
  29.     while (u != &ROOT && prio < u->get_bal())           // rotate v up   
  30.     {                                                //       p
  31.       rs_tree_item p = u->parent;                    //       |
  32.       rs_tree_item r = v->child[1-dir];              //       |
  33.       u->child[dir] = r;                             //       u
  34.       v->child[1-dir] = u;                           //      / \
  35.       u->parent = v;                                 //     /   \
  36.       r->parent = u;                                 //    *     v (prio)
  37.       propagate_modification(5,v,u);                 //         / \
  38.       propagate_modification(4,u,r);                 //        /   \
  39.                                                      //       r     *
  40.       dir = (u == p->child[left]) ? left : right;
  41.       u = p;
  42.      }
  43.   
  44.     // link to parent
  45.   
  46.     u->child[dir] = v;
  47.     v->parent = u;
  48.  
  49.     if (u!=&ROOT) 
  50.        propagate_modification(6,u,v);
  51.   }
  52.  
  53. }
  54.  
  55. void rs_tree::del_rebal(rs_tree_item, rs_tree_item) { }
  56.  
  57.